<?php
	header('Cache-control: no-cache');
	header('Content-type: text/html; charset=utf-8'); 
	mb_internal_encoding('UTF-8');
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Установка - eXcalibur CMS</title>

<meta name="generator" content="eXcalibur CMS" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link href="/favicon.ico" type="image/ico" rel="icon" />
<link rel="stylesheet" href="/static/global.css" type="text/css" media="all" />
<link rel="stylesheet" href="/static/modules.css" type="text/css" media="all" />

<TABLE width="100%">
	<TR>
		<TD colspan=2 align="center">
			<img alt="eXcalibur CMS Engine" src="/images/logo.jpg"/>
			<H5>Установка</H5>
		</TD>
	</TR>
	<TR>
		<TD width="200px" valign="top">
			<div class="m">
				<h1>Шаги</h1>
				<div class="step-off">
					1 : Начальная проверка
				</div>
				<div class="step-on">
					2 : Лицензия
				</div>
				<div class="step-off">
					3 : База данных
				</div>
				<div class="step-off">
					4 : Конфигурация
				</div>
				<div class="step-off">
					5 : Завершение
				</div>
			<div class="logo"></div>
	  	</div>
		</TD>
		<TD align="center">


<?

if ($_GET['step'] == 1 || $_GET['step'] == '')
{
	echo 'Если любая из этих установок не поддерживается (выделена как Нет), то настройки вашей системы не соответствуют минимальным необходимым требованиям. Пожалуйста, исправьте положение и повторите проверку. Иначе, это может привести к сбою при установке и некорректной работе системы.';
	
	// Проводим проверки
	
	// Версия PHP пятая
	$options[] = array (
		'label' => '- PHP 5',
		'state' => phpversion() < '5.0.0' 
			? 'No' 
			: 'Yes'
	);
	
	// Установлено расширение GD для работы с графикой
	$options[] = array (
		'label' => '- Установлено рассширение GD',
		'state' => extension_loaded('gd') 
			? 'Yes' 
			: 'No'
	);

	// Php собран с поддержкой MySQL
	$options[] = array (
		'label' => '- Поддержка MySQL',
		'state' => (function_exists('mysql_connect') || function_exists('mysqli_connect')) 
			? 'Yes' 
			: 'No'
	);
	
	// Php собран с поддержкой многобайтных кодировок
	$options[] = array (
		'label' => '- Поддержка многобайтных кодировок',
		'state' => (extension_loaded( 'mbstring' ) ) 
			? 'Yes' 
			: 'No'
	);

	// Доступ на запись в папку логов
	$cW = (@ is_writable('../modules/system/logs/'));
	$options[] = array (
		'label' => '- Доступ для записи логов в <b>modules/system/logs/</b>',
		'state' => $cW ? 'Yes' : 'No'
		);

	// Доступ на запись в папку кэша
	$cW = (@ is_writable('../modules/system/cache/'));
	$options[] = array (
		'label' => '- Доступ для записи кэша в <b>modules/system/cache/</b>',
		'state' => $cW ? 'Yes' : 'No'
		);
		
	// Доступ на запись в папку загрузок
	$cW = (@ is_writable('../uploads/') && 
		@ is_writable('../uploads/avatars/') && 
		@ is_writable('../uploads/posts/') && 
		@ is_writable('../uploads/blogs/') );
	$options[] = array (
		'label' => '- Доступ для записи в папку загрузок <b>uploads/</b> и вложенные',
		'state' => $cW ? 'Yes' : 'No'
		);
		

	// Доступ на запись в конфиг БД
	$cW = (@ file_exists('../modules/system/config/database.php') && @ is_writable('../modules/system/config/database.php')) || is_writable('../');
	$options[] = array (
		'label' => '- Доступ для записи в <b>modules/system/config/database.php</b>',
		'state' => $cW ? 'Yes' : 'No'
		);
		
	// Выводим результаты тестов
	echo '<TABLE>';
	foreach ($options as $option)
	{
		echo '<TR>';
		if ($option['state'] == 'Yes')
		{
			echo '<TD><font color="green">Да</font> </TD>';
		}
		else
		{
			echo '<TD><font color="red">Нет</font> </TD>';
		}		
		echo '<TD align="left">'.$option['label'].'</TD></TR>';
	}
	echo '</TABLE>';

	echo '<br><a href="?step=1">Повторить проверку</a> | <a href="?step=2">Далее</a>';

}
elseif  ($_GET['step'] == 2)
{

	echo '<h1>Лицензия GNU/GPL:</h1>
	<iframe src="GNU_GPL_English.html" style="height:300px; padding:0px; width:600px;" frameborder="0" marginwidth="25" scrolling="auto"></iframe>';

	echo '<br><a href="?step=1">Назад</a> | <a href="?step=3">Далее</a>';
}
elseif  ($_GET['step'] == 3)
{
?>
	<h1>Настройка:</h1>
	<form method=post name=install action='install.php?step=4'>
	<table border=0>
		<tr><td>Сервер:</td><td><input type=text size=20 name=server value='localhost'></td></tr>
		<tr><td>Имя базы данных:</td><td><input type=text size=20 name=db_name></td></tr>
		<tr><td>Пользователь БД:</td><td><input type=text size=20 name=db_username></td></tr>
		<tr><td>Пароль БД:</td><td><input type=text size=20 name=db_password></td></tr>
		<tr><td>Префикс таблиц:</td><td><input type=text size=20 name=db_prefix value='excl'></td></tr>		
		<tr><td colspan=2><b>Создание профиля администратора</b></td></tr>
		<tr><td>Логин:</td><td><input type=text size=20 name=admin_login></td></tr>
		<tr><td>Пароль:</td><td><input type=password size=20 name=admin_pass></td></tr>
		<tr><td>Повторите пароль:</td><td><input type=password size=20 name=admin_pass2></td></tr>
		<tr><td>Имя:</td><td><input type=text size=20 name=admin_name></td></tr>
		<tr><td>E-mail:</td><td><input type=text size=20 name=admin_email></td></tr>
	</table>
	<font color=red>Внимание! Внимательно проверьте все поля перед подтверждением установки!</font><p>
	<input type=submit name=submit value='Установить'> <input type=reset value='Очистить'>
        </form>
<?
}
elseif  ($_GET['step'] == 4)
{
	$server = $_POST['server'];
	$dbname = $_POST['db_name'];
	$dbusername = $_POST['db_username'];
	$dbpassword = $_POST['db_password'];

	$admin_login = $_POST['admin_login'];
	$admin_pass = $_POST['admin_pass'];
	$admin_pass2 = $_POST['admin_pass2'];
	$admin_name = $_POST['admin_name'];
	$admin_email = $_POST['admin_email'];

	$prefix = $_POST['db_prefix'];

	if ($server == '' || $dbname == '' || $dbusername == '') 
	{
		print "<center><b>Проверьте правильность ввода данных БД!<p><a href='javascript:history.back()'>Назад</a>";
		exit;
	}

	if ($admin_login == '' || $admin_pass == '' || ($admin_pass != $admin_pass2) || $admin_name == '' || $admin_email == '') 
	{
		print "<center><b>Проверьте правильность ввода данных администратора!<p><a href='javascript:history.back()'>Назад</a>";
		exit;
	}
	
	if (strlen($admin_login) < 4 || strlen($admin_login) > 16) 
	{
		print "<center><b>Логин должен быть длиной от 4 до 16 символов!<p><a href='javascript:history.back()'>Назад</a>";
		exit;
	}
	
	if (strlen($admin_pass) < 4 || strlen($admin_pass) > 16) 
	{
		print "<center><b>Пароль должен быть длиной от 4 до 16 символов!<p><a href='javascript:history.back()'>Назад</a>";
		exit;
	}

	// Подключаемся к БД
	$mysqlconnect = @mysql_connect ($server, $dbusername, $dbpassword);
	if (!$mysqlconnect) 
	{
		print "<center><b>Ошибка подключения к MySQL!<p><a href='javascript:history.back()'>Назад</a>";
		exit;
	}
	
	$mysqlselect = mysql_select_db ($dbname, $mysqlconnect);
	if (!$mysqlselect) 
	{
		print "<center><b>Ошибка подключения к БД!<p><a href='javascript:history.back()'>Назад</a>";
		exit;
	}
        
	if ($mysqlconnect && $mysqlselect) 
	{
		mysql_query('SET NAMES "utf8"', $mysqlconnect) or die (mysql_error ());
		$ms = fopen ('SQL.txt', 'r');
		$mysql = fread ($ms, filesize('SQL.txt'));
		fclose ($ms);
		
		$mysql = str_replace ("#_", $prefix, $mysql);
		
		$array = explode (";", $mysql);
		$count = count ($array);
		for ($i=0; $i<$count-1; $i++) 
		{
			
			// Определяем цель запроса
			/* Проблема с неравномерными отступами при разборе SQL файла
			if (mb_substr($array[$i], 2, 12) == 'CREATE TABLE')
			{
				$what = 'Создаем таблицу '.mb_substr($array[$i], 14, mb_strpos($array[$i], '(')-15);
			}
			elseif (mb_substr($array[$i], 2, 11) == 'INSERT INTO')
			{
				$what = 'Добавляем запись в таблицу '.mb_substr($array[$i], 13, strpos($array[$i], 'VALUES')-14);
			}
			else
			{
				$what = 'Запрос ['.mb_substr($array[$i], 2, 12).']['.mb_substr($array[$i], 2, 11).']';
			}
			*/
			
			if (mysql_query($array[$i], $mysqlconnect)) 
				echo '<font color="green">+</font><br />';
			else 
				echo '<font color="red"><b>Ошибка в запросе: </b> (<small>'.$array[$i].'</small>)<br><b>'.mysql_error().'</b></font><br /><br />';
		}

		$data = array(
				'server' => $server,
				'username' => $dbusername,
				'password' => $dbpassword,
				'name' => $dbname,
				'prefix' => $prefix
				);
	
		// Добавляем библиотеку функций ядра
		require $_SERVER['DOCUMENT_ROOT'].'/modules/system/classes/core_functions.php';
	
		// Сохраняем файл конфигурации
		save_config('/modules/system/config/database.php',$data, 'DB');


		mysql_query("INSERT INTO {$prefix}_users VALUES (0, '$admin_login', '".expl_hash($admin_pass)."', '$admin_name', 'admin', '1', '$admin_email', '', '', '".time()."', '', 'off', '', '0', '0', '', 'off', '', '', '', '', '', '', '', '', '', '', '')",$mysqlconnect) or die (mysql_error ());

		print "<font color=green><b>Профиль администратора создан!</b></font><p>
		<input type=button value='Вход на сайт!' onclick='javascript:document.location.href=\"/admin/\"'>";
	}

}


function expl_hash($str)
{
	if (function_exists('sha1')) return sha1($str);
	elseif (function_exists('mhash')) return bin2hex(mhash(MHASH_SHA1, $str));
	else return md5($str);
}



?>
